/**
 * 分类相关类型定义
 * 定义分类数据结构和相关接口
 */

/**
 * 分类基础信息接口
 */
export interface Classify {
  /** 唯一标识符 */
  id: string;
  /** 分类标签 */
  label: string;
  /** 分类值 */
  value: string;
  /** 分类描述 */
  description?: string;
  /** 图标名称 */
  icon?: string;
  /** 分类颜色 */
  color?: string;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
}

/**
 * 分类数据容器接口
 */
export interface ClassifyData {
  /** 分类列表 */
  classifies: Classify[];
}

/**
 * 创建分类时的输入参数
 */
export type CreateClassifyInput = Omit<Classify, 'id' | 'createdAt' | 'updatedAt'>;

/**
 * 更新分类时的输入参数
 */
export type UpdateClassifyInput = Partial<CreateClassifyInput>;

/**
 * 分类查询参数
 */
export interface ClassifyQuery {
  /** 页码，默认1 */
  page?: number;
  /** 每页数量，默认10 */
  limit?: number;
  /** 搜索关键词 */
  search?: string;
}

/**
 * 分类API响应接口
 */
export interface ClassifyApiResponse<T = any> {
  /** 请求是否成功 */
  success: boolean;
  /** 响应数据 */
  data?: T;
  /** 错误信息 */
  error?: string;
  /** 响应消息 */
  message?: string;
  /** 总数 */
  total?: number;
  /** 当前页码 */
  page?: number;
  /** 每页数量 */
  limit?: number;
  /** 分页信息 */
  pagination?: {
    total: number;
    page: number;
    limit: number;
    totalPages: number;
  };
}

/**
 * 分类操作结果类型
 */
export interface ClassifyOperationResult<T = Classify> {
  /** 操作是否成功 */
  success: boolean;
  /** 错误信息（如果有） */
  error?: string;
  /** 提示信息（如果有） */
  message?: string;
  /** 返回的数据（如果有） */
  data?: T;
}

/**
 * 分类校验规则
 */
export interface ClassifyValidationRules {
  label: {
    required: boolean;
    minLength: number;
    maxLength: number;
  };
  value: {
    required: boolean;
    pattern: RegExp;
  };
  description: {
    maxLength: number;
  };
  icon: {
    maxLength: number;
  };
  color: {
    pattern: RegExp;
  };
}

/**
 * 分类图标预设
 */
export const CLASSIFY_ICONS = [
  'Bot',
  'Cpu',
  'Database',
  'Globe',
  'Code',
  'Zap',
  'Brain',
  'Rocket',
  'Shield',
  'Star',
  'Heart',
  'Settings'
] as const;

/**
 * 分类图标类型
 */
export type ClassifyIcon = typeof CLASSIFY_ICONS[number];

/**
 * 分类颜色预设
 */
export const CLASSIFY_COLORS = [
  '#00ff88', // 霓虹绿
  '#00ccff', // 电子蓝
  '#ff0080', // 霓虹粉
  '#ffff00', // 霓虹黄
  '#ff8000', // 霓虹橙
  '#8000ff', // 霓虹紫
  '#ff0040', // 霓虹红
  '#40ff00'  // 霓虹青
] as const;

/**
 * 分类颜色类型
 */
export type ClassifyColor = typeof CLASSIFY_COLORS[number];